package com.lingqi;

import com.lingqi.util.DBUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

// 一切正常下的 sql 演示
public class Demo1 {
    public static void main(String[] args) throws SQLException {
        String sql1 = "insert into records (rid, bid) values (1, 2)";
        String sql2 = "update books set count = count - 1 where bid = 2";

        // 要使用事务，在同一个事务中，操作 sql1 和 sql2，意味着必须在一条 Connection 完成
        try(Connection c = DBUtil.connection()){
            // connection 中有一个 自动提交（autocommit）的属性，默认情况下，是 true（开启）
            // 开启状态下，意味着，每一条 sql 都会被独立的视为一个事务
            // 我们要让 sql1 和 sql2 看作整体，只需要关闭 connection 的自动提交
            c.setAutoCommit(false);     // 不会提交，只能被我们进行手动提交
                                        // 我们就可以手动的控制事务的结束位置
            try(PreparedStatement ps = c.prepareStatement(sql1)){
                ps.executeUpdate();
            }
            try(PreparedStatement ps = c.prepareStatement(sql2)){
                ps.executeUpdate();
            }

            // 由于我们关闭了自动提交，所以，所修改的还没有真正的落盘
            c.commit();    // 只有加上这句，事务才被真正的提交了
        }

    }
}
